package com.javacoo.xservice.base.support.swaparea;

import com.javacoo.xservice.base.support.swaparea.internal.DefaultSwapAreaManager;

/**
 * 数据交换工具类
 * <p>说明:</p>
 * <li>框架内部使用，严禁外部使用</li>
 * @author DuanYong
 * @since 2017年6月30日上午10:10:04
 */
public class SwapAreaUtils{
    /** 默认数据交换区管理类 */
	private static SwapAreaManager swapAreaManager = new DefaultSwapAreaManager();
    /**
     * 获取当前线程数据交换区对象接口实现
     * <li></li>
     * @author DuanYong
     * @date 2017年6月30日上午10:20:03
     * @return: com.javacoo.xservice.base.support.swaparea.SwapArea
     */
	public static SwapArea getCurrentSwapArea() {
		return swapAreaManager.getCurrentSwapArea().orElseGet(()->swapAreaManager.buildNewSwapArea());
	}
    /**
     * 释放当前线程数据交换区对象
     * <li></li>
     * @author DuanYong
     * @date 2017年6月30日上午10:24:12
     * @return: void
     */
	public static void releaseCurrentSwapArea() {
		swapAreaManager.releaseCurrentSwapArea();
	}
    /**
     * 设置当前线程数据交换区对象
     * <li></li>
     * @author DuanYong
     * @date 2017年6月30日上午10:26:12
     * @return: void
     */
	public static void setSwapAreaData(SwapAreaData swapAreaData) {
		getCurrentSwapArea().setSwapAreaData(swapAreaData);
	}
    /**
     * 获取当前线程数据交换区对象
     * <li></li>
     * @author DuanYong
     * @date 2017年6月30日上午10:29:34
     * @return: void
     */
	public static SwapAreaData getSwapAreaData() {
		return getCurrentSwapArea().getSwapAreaData().orElse(new SwapAreaData());
	}
}
